/**
 * Description:
 * Class Name:CloneTest
 * Date:2022/2/19 10:34
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第7章_Java基础类库._7_3_常用类.Object类;

class Address{
    String detail;
    public Address(String detail){
        this.detail = detail;
    }
}

// 实现Cloneable接口
class User implements java.lang.Cloneable{
    int age;
    Address address;
    public User(int age){
        this.age = age;
        address = new Address("广州天河");
    }
    // 通过调用super.clone()来实现clone方法
    public User clone() throws CloneNotSupportedException{
        return (User) super.clone();                            // 注意，它这里的super指的是Object类
        // 不使用super，直接使用clone也行，但是需要把外层的方法名改掉，否则会不断递归直至栈溢出
    }
}

public class CloneTest {
    public static void main(String[] args) throws CloneNotSupportedException{
        var u1 = new User(29);
        // clone得到u1对象的副本
        var u2 = u1.clone();
        // 判断u1和u2是否相同
        System.out.println(u1.equals(u2));                      // ①
        // 判断u1、u2的address是否相同
        System.out.println(u1.address.equals(u2.address));      // ②
    }
}
